perm filename RECDPY.SAI[SYS,HE]1 blob
sn#009309 filedate 1972-12-06 generic text, type T, neo UTF8
COMMENT ⊗ VALID 00008 PAGES
RECORD PAGE DESCRIPTION
00001 00001
00002 00002 ENTRY DUMMY
00003 00003 α LOCALS, INTERNALS, AND EXTERNALS
00005 00004 α SYSTEM PROCEDURES
00006 00005 α STATUS PROCEDURES
00009 00006 α DISPLAY PRIMITIVES
00013 00007 α INITIALIZATION SUBRS
00015 00008 α FLIT
00020 ENDMK
⊗;
ENTRY DUMMY;
BEGIN "RECDPY - RECOGNIZER'S DISPLAY ROUTINES"
REQUIRE 100 PNAMES;
REQUIRE "PREAMB.SAI[SYS,HE]" SOURCE_FILE;
REQUIRE "SYMBOL.AUX[H,RPO]" SOURCE_FILE;
REQUIRE "DPYIII.AUX[H,RPO]" SOURCE_FILE;
DEFINE
APOG=<6>,
BPOG=<7>,
SPOG=<8>,
T1POG=<9>,
T2POG=<10>,
TEXT=<1>, MEDIUM=<2>, BIG=<5>,
DIM=<3>, BRIGHT=<6>;
α LOCALS, INTERNALS, AND EXTERNALS;
α INTERNALS;
INTERNAL SAFE INTEGER ARRAY
DPYAA[1:200],
DPYBB[1:100],
DPYCC[1:10];
INTERNAL BOOLEAN
DPYBOOL;
INTERNAL STRING
DPYRTS;
INTERNAL INTEGER
α DISPLAY WINDOW;
DXL,DXH,DXCTR,DXO,DDX,
DYL,DYH,DYCTR,DYO,DDY, DA;
INTERNAL REAL
α LOGICAL PARAMETERS;
LDX,LDY,
α SOURCE WINDOW;
SXL,SXH,SXO,SDX,
SYL,SYH,SYO,SDY, SA,
α OBJECT WINDOW;
OXL,OXH,
OYL,OYH,
MAGX,MAGY,DISX,DISY;
α LOCALS;
BOOLEAN
DB_BRK, DB_JOB, DB_LAB, DB_TELL, DB_INFO, DB_CMD;
STRING
NAME, DS_JOB, DS_LAB, DS_TELL, DS_INFO, DS_CMD;
SET
ESET;
α EXTERNALS;
EXTERNAL INTEGER
DEBUG1;
α SYSTEM PROCEDURES;
INTERNAL STRING SUBR PRINTNAME(ITEMVAR X);
BEGIN "PRINTNAME"
STRING NAME; INTEGER I;
NAME←CVIS(X,I);
IF I
THEN ⊂ IF CVN(X)>1024
THEN NAME←"G"&CVOS(CVN(X))
ELSE NAME←"L"&CVOS(CVN(X));
NEW_PNAME(X,NAME) ⊃;
RETURN(NAME);
END "PRINTNAME";
α STATUS PROCEDURES;
FORWARD ISUBR DPYPTS;
FORWARD ISUBR DPYLS;
FORWARD ISUBR DPYS;
FORWARD ISUBR DPYSCENE;
FORWARD ISUBR FLIT;
DEFINE
JOBLINE= <DXL+5,DYH-30>,
TELLINE= <DXCTR,DYH-25>,
LABLINE= <DXCTR,DYH-40>,
INFOLINE= <DXCTR,DYH-55>,
CMDLINE= <DXCTR,DYH-70>;
SUBR DPYFRAME;
IF DEBUG1
THEN
⊂ "DPYFRAME" AIVECT(DXL,DYL);AVECT(DXH,DYL);AVECT(DXH,DYH);
AVECT(DXL,DYH);AVECT(DXL,DYL);
AIVECT(OXL,OYL);AVECT(OXH,OYL);AVECT(OXH,OYH);
AVECT(OXL,OYH);AVECT(OXL,OYL) ⊃ "DPYFRAME";
ISUBR DPYSTAT;
IF DEBUG1
THEN ⊂ "DPYSTAT"
DPYSET(DPYAA);
DPYBIG(MEDIUM);
DPYBRT(DIM);
DPYFRAME;
AIVECT(JOBLINE);
IF DB_BRK
THEN DPYSST("* "&DS_JOB)
ELSE DPYSST("- "&DS_JOB);
IF DB_LAB
THEN ⊂ AIVECT(LABLINE); DPYSST(DS_LAB) ⊃;
IF DB_TELL
THEN ⊂ AIVECT(TELLINE); DPYSST(DS_TELL) ⊃;
IF DB_INFO
THEN ⊂ AIVECT(INFOLINE); DPYSST(DS_INFO) ⊃;
IF DB_CMD
THEN ⊂ AIVECT(CMDLINE); DPYSST(DS_CMD) ⊃;
DPYOUT(SPOG);
END "DPYSTAT";
ISUBR DPYBRK;
IF DEBUG1
THEN ⊂ "DPYBRK" DB_BRK←TRUE; DPYSTAT;
DPYRTS←INCHWL;
IF EQU(DPYRTS,"RUN")
THEN DEBUG1←FALSE
ELSE
IF EQU(DPYRTS,"LINES")
THEN DPYLS
ELSE
IF EQU(DPYRTS,"POINTS")
THEN DPYPTS
ELSE
IF EQU(DPYRTS,"LOCAL")
THEN DPYS
ELSE
IF EQU(DPYRTS,"GLOBAL")
THEN DPYSCENE
ELSE
IF EQU(DPYRTS,"FLIT")
THEN FLIT;
DB_BRK←FALSE; DPYSTAT;
⊃ "DPYBRK";
ISUBR DPYJOB(STRING JOBNAM);
IF DEBUG1
THEN
⊂ "DPYJOB" DB_JOB←TRUE; DS_JOB←JOBNAM; DPYSTAT; ⊃ "DPYJOB";
ISUBR DPYLAB(STRING STR);
IF DEBUG1
THEN
⊂ "DPYLAB" DB_LAB←TRUE; DS_LAB←STR; DPYBRK; ⊃ "DPYLAB";
ISUBR DPYTELL(STRING STR);
IF DEBUG1
THEN
⊂ "DPYTELL" DB_TELL←TRUE; DS_TELL←STR; DPYSTAT; ⊃ "DPYTELL";
ISUBR DPYINFO(STRING STR);
IF DEBUG1
THEN
⊂ "DPYINFO" DB_INFO←TRUE; DS_INFO←STR; DPYSTAT; ⊃ "DPYINFO";
ISUBR DPYCMD(STRING STR);
IF DEBUG1
THEN
⊂ "DPYCMD" DB_CMD←TRUE; DS_CMD←STR; DPYSTAT; ⊃ "DPYCMD";
α DISPLAY PRIMITIVES;
ISUBR DPYPT(SAFE REAL ARRAY ITEMVAR PT);
IF DEBUG1
THEN ⊂ "DPYPT"
NAME←PRINTNAME(PT);
DPYSET(DPYCC);
DPYBIG(TEXT);
DPYBRT(BRIGHT);
IF NAME="G"
THEN AIVECT($ #X(PT)-10,$ #Y(PT)-10)
ELSE AIVECT(#X(PT)-10,#Y(PT)-10);
DPYSST("o"&NAME);
DPYOUT(T1POG);
DPYBRK;
HYDPOG(T1POG) ⊃ "DPYPT";
ISUBR DPYPTS;
IF DEBUG1
THEN ⊂ "DPYPTS"
ITEMVAR B;
SAFE REAL ARRAY ITEMVAR P;
DPYS;
DPYSET(DPYAA);
DPYBIG(TEXT);
DPYBRT(DIM);
∀ B|BODY⊗SCENE≡B DO
∀ P|POINT⊗B≡P DO
⊂ AIVECT(#X(P)-10,#Y(P)-10); DPYSST(PRINTNAME(P)) ⊃;
DPYOUT(T1POG);
DPYBRK;
HYDPOG(T1POG) ⊃ "DPYPTS";
ISUBR DPYL(ITEMVAR L);
IF DEBUG1
THEN ⊂ "DPYL"
SAFE REAL ARRAY ITEMVAR V1,V2;
NAME←PRINTNAME(L);
IF NAME="G"
THEN ⊂ ESET← $ ENDPT⊗L;
V1←LOP(ESET);
V2←COP(ESET);
AIVECT($ #X(V1), $ #Y(V1));
AVECT($ #X(V2), $ #Y(V2)) ⊃
ELSE ⊂ ESET← ENDPT⊗L;
V1←LOP(ESET);
V2←COP(ESET);
AIVECT(#X(V1), #Y(V1));
AVECT(#X(V2), #Y(V2)) ⊃ ⊃ "DPYL";
ISUBR DPYLN(ITEMVAR L);
IF DEBUG1
THEN ⊂ "DPYLN"
REAL X,Y;
SAFE REAL ARRAY ITEMVAR V1,V2;
NAME←PRINTNAME(L);
IF NAME="G"
THEN ⊂ ESET← $ ENDPT⊗L;
V1←LOP(ESET);
V2←COP(ESET);
X← ( $ #X(V1) + $ #X(V2) )/2;
Y← ( $ #Y(V1) + $ #Y(V2) )/2 ⊃
ELSE ⊂ ESET← ENDPT⊗L;
V1←LOP(ESET);
V2←COP(ESET);
X← ( #X(V1)+#X(V2))/2;
Y← ( #Y(V1)+#Y(V2))/2 ⊃;
AIVECT(X-10,Y-10);
DPYSST(NAME) ⊃ "DPYLN";
ISUBR DPYLS;
IF DEBUG1
THEN ⊂ "DPYLS"
ITEMVAR B,L;
DPYSET(DPYAA);
DPYBIG(TEXT);
DPYBRT(DIM);
∀ B|BODY⊗SCENE≡B DO
∀ L|LINE⊗B≡L DO
⊂ DPYL(L);
DPYLN(L) ⊃;
DPYOUT(T1POG);
DPYBRK;
HYDPOG(T1POG) ⊃ "DPYLS";
ISUBR DPYB(ITEMVAR B);
IF DEBUG1
THEN ⊂ "DPYB" ITEMVAR L;
DPYSET(DPYAA); DPYBRT(BRIGHT);DPYBIG(TEXT);
NAME←PRINTNAME(B);
IF NAME="G"
THEN ∀ L| $ LINE⊗B≡L DO DPYL(L)
ELSE ∀ L| LINE⊗B≡L DO DPYL(L);
DPYOUT(APOG); DPYINFO("BODY "&NAME) ⊃ "DPYB";
ISUBR DPYS;
IF DEBUG1
THEN ⊂ "DPYS" ITEMVAR B,L;
DPYSET(DPYAA); DPYBRT(DIM); DPYBIG(TEXT);
∀ B|BODY⊗SCENE≡B DO
∀ L|LINE⊗B≡L DO DPYL(L);
DPYOUT(BPOG); DPYTELL("THE LOCAL SCENE") ⊃ "DPYS";
ISUBR DPYSCENE;
IF DEBUG1
THEN ⊂ "DPYSCENE" ITEMVAR B,L;
DPYSET(DPYAA); DPYBRT(DIM); DPYBIG(TEXT);
∀ B|$ BODY⊗SCENE≡B DO
∀ L|$ LINE⊗B≡L DO DPYL(L);
DPYOUT(BPOG); DPYTELL("THE GLOBAL SCENE") ⊃ "DPYSCENE";
α INITIALIZATION SUBRS;
ISUBR DPYINIT;
⊂ "DPYINIT"
α PHYSICAL, LOGICAL CAMERA SIZE;
LDX ← 316; LDY ← 240;
α SOURCE WINDOW;
SXL←0; SXH←LDX; SDX←LDX;
SYL←0; SYH←LDY; SDY←LDY;
SXO←0; SYO←0; SA←SDX/SDY;
α DISPLAY WINDOW;
DDX←DDY←500; DA←1;
DXO←0; DYO←0;
DXL←DXO; DXH←DXO+DDX; DYL←DYO; DYH←DYO+DDY;
α OBJECT WINDOW;
MAGX←MAGY←(IF SA>DA THEN DDX/SDX ELSE DDY/SDY);
OXL←DXO; OXH←DXO+MAGX*SDX;
OYL←DYO; OYH←DYO+MAGY*SDY;
DISX←DXO; DISY←DYO;
DXCTR←(DXL+DXH)/2; DYCTR←(DYL+DYH)/2;
DPYTYP(-20,20,1);
DPYJOB("RECOGNIZER");
DPYLAB("DISPLAY INITIALIZED");
⊃ "DPYINIT";
ISUBR DPYVINIT;
⊂ "DPYVINIT"
ITEMVAR B;
SAFE REAL ARRAY ITEMVAR P;
∀ B|BODY⊗SCENE≡B DO
∀ P|POINT⊗B≡P DO
⊂ ∂(P)[6] ← MAGX * ∂(P)[1] + DISX;
∂(P)[7] ← MAGY * ∂(P)[2] + DISY; ⊃ ⊃ "DPYVINIT";
ISUBR DPYVI(SAFE REAL ARRAY ITEMVAR V);
⊂ "DPYVI"
∂(V)[6] ← MAGX * ∂(V)[1] + DISX;
∂(V)[7] ← MAGY * ∂(V)[2] + DISY; ⊃ "DPYVI";
α FLIT
called from DPYBRK.
allows you to look at selected parts of
the associative store for debugging purposes.;
α TYPEIT="17" MEANS REAL ARRAY
TYPEIT="4" MEANS REAL;
ISUBR FLIT;
BEGIN "FLIT"
LABEL TRIPLE;
BOOLEAN GLBSW,DTMSW,ITMSW;
INTEGER FLAG,BREAK,I;
SAFE REAL ARRAY ITEMVAR XRA;
REAL ITEMVAR XR;
ITEMVAR X,Y,Z; STRING STR,TOKEN,TRPSW;
SETBREAK(1,"≡⊗`, "&'12,'15,"ISN");
WHILE TRUE DO BEGIN "FLIT LOOP"
TYPE "COMMANDS: x,y,z x⊗y x⊗ANY x`y x`ANY GLOBAL DATUM NUMBER"&
↓&"*" EOM;
GLBSW←FALSE;
DTMSW←FALSE;
ITMSW←FALSE;
STR←INCHWL;
DO BEGIN "GET IT"
TOKEN←SCAN(STR,1,BREAK);
IF EQU(TOKEN,"DATUM")
THEN DTMSW←TRUE;
IF EQU(TOKEN,"NUMBER")
THEN ITMSW←TRUE;
IF EQU(TOKEN,"GLOBAL")
THEN GLBSW←TRUE;
END "GET IT" UNTIL ¬EQU(TOKEN,"DATUM") ∧ ¬EQU(TOKEN,"NUMBER")
∧ ¬EQU(TOKEN,"GLOBAL");
IF EQU(TOKEN,"Q")
THEN DONE;
IF ITMSW ∨ DTMSW
THEN DO BEGIN "CONVRT"
X←CVSI(TOKEN,FLAG);
IF FLAG ∨ TYPEIT(X)=0
THEN TYPE "NO ITEM - "&TOKEN EOM
ELSE IF ITMSW
THEN TYPE "PNAME:"&PRINTNAME(X)&TAB&"ITEM:"&CVOS(CVN(X)) EOM;
IF DTMSW
THEN IF TYPEIT(X)=17
THEN BEGIN
XRA←CVSI(TOKEN,FLAG);
TYPE "REAL ARRAY ITEMVAR DATUM" EOM;
IF GLBSW
THEN FOR I←1 S1U 4 DO
TYPE CVG(GLB ∂(XRA)[I])&", " EOS
ELSE FOR I←1 S1U 7 DO
TYPE CVG(∂(XRA)[I])&", " EOS;
TYPE "DONE" EOM;
END
ELSE IF TYPEIT(X)=4
THEN BEGIN
XR←CVSI(TOKEN,FLAG);
TYPE "REAL ITEMVAR DATUM" EOM;
IF GLBSW
THEN TYPE "PNAME:"&PRINTNAME(XR)&CVG(GLB ∂(XR)) EOM
ELSE TYPE "PNAME:"&PRINTNAME(XR)&CVG(∂(XR)) EOM;
END;
TOKEN←SCAN(STR,1,BREAK);
END "CONVRT" UNTIL TOKEN=NULL;
X←CVSI(TOKEN,FLAG);
IF BREAK="⊗" ∨ BREAK="`"
THEN BEGIN "SET"
TRPSW←BREAK;
TOKEN←SCAN(STR,1,BREAK);
Y←CVSI(TOKEN,FLAG);
IF BREAK="≡"
THEN GO TRIPLE;
IF TRPSW="⊗"
THEN IF EQU(TOKEN,"ANY")
THEN IF GLBSW
THEN ∀ Z|GLB X⊗ANY≡Z DO TYPE PRINTNAME(Z)&" " EOS
ELSE ∀ Z|X⊗ANY≡Z DO TYPE PRINTNAME(Z)&" " EOS
ELSE IF GLBSW
THEN ∀ Z|GLOBAL X⊗Y≡Z DO TYPE PRINTNAME (Z)&" " EOS
ELSE ∀ Z|X⊗Y≡Z DO TYPE PRINTNAME (Z)&" " EOS
ELSE IF EQU(TOKEN,"ANY")
THEN IF GLBSW
THEN ∀ Z|GLB X⊗Z≡ANY DO TYPE PRINTNAME(Z)&" " EOS
ELSE ∀ Z|X⊗Z≡ANY DO TYPE PRINTNAME(Z)&" " EOS
ELSE IF GLBSW
THEN ∀ Z|GLOBAL X⊗Z≡ANY DO TYPE PRINTNAME(Z)&" " EOS
ELSE ∀ Z|X⊗Z≡Y DO TYPE PRINTNAME(Z)&" " EOS;
TYPE "THAT'S ALL OF 'EM." EOM;
END "SET"
ELSE BEGIN "TRIPLE"
TOKEN←SCAN(STR,1,BREAK);
IF BREAK="≡"
THEN BEGIN "DO TRP"
Y←CVSI(TOKEN,FLAG);
TRIPLE: TOKEN←SCAN(STR,1,BREAK);
Z←CVSI(TOKEN,FLAG);
IF GLBSW
THEN IF GLOBAL X⊗Y≡Z
THEN TYPE "(GLOBAL) TRUE" EOM
ELSE TYPE "(GLOBAL) FALSE" EOM
ELSE IF X⊗Y≡Z
THEN TYPE "TRUE" EOM
ELSE TYPE "FALSE" EOM;
END "DO TRP";
END "TRIPLE";
END "FLIT LOOP";
DPYBRK;
END "FLIT";
END "RECDPY - RECOGNIZER'S DISPLAY ROUTINES";